/**
 * jQuery EasyUI 1.5.1
 *
 * Copyright (c) 2009-2016 www.jeasyui.com. All rights reserved.
 *
 * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
 * To use it on other terms please contact us: info@jeasyui.com
 *
 */
(function ($) {
    $(function () {
        $(document).unbind(".combo").bind("mousedown.combo mousewheel.combo", function (e) {
            var p = $(e.target).closest("span.combo,div.combo-p,div.menu");
            if (p.length) {
                _1(p);
                return;
            }
            $("body>div.combo-p>div.combo-panel:visible").panel("close");
        });
    });

    function _2(_3) {
        var _4 = $.data(_3, "combo");
        var _5 = _4.options;
        if (!_4.panel) {
            _4.panel = $("<div class=\"combo-panel\"></div>").appendTo("body");
            _4.panel.panel({
                minWidth: _5.panelMinWidth,
                maxWidth: _5.panelMaxWidth,
                minHeight: _5.panelMinHeight,
                maxHeight: _5.panelMaxHeight,
                doSize: false,
                closed: true,
                cls: "combo-p",
                style: {position: "absolute", zIndex: 10},
                onOpen: function () {
                    var _6 = $(this).panel("options").comboTarget;
                    var _7 = $.data(_6, "combo");
                    if (_7) {
                        _7.options.onShowPanel.call(_6);
                    }
                },
                onBeforeClose: function () {
                    _1($(this).parent());
                },
                onClose: function () {
                    var _8 = $(this).panel("options").comboTarget;
                    var _9 = $(_8).data("combo");
                    if (_9) {
                        _9.options.onHidePanel.call(_8);
                    }
                }
            });
        }
        var _a = $.extend(true, [], _5.icons);
        if (_5.hasDownArrow) {
            _a.push({
                iconCls: "combo-arrow", handler: function (e) {
                    _f(e.data.target);
                }
            });
        }
        $(_3).addClass("combo-f").textbox($.extend({}, _5, {
            icons: _a, onChange: function () {
            }
        }));
        $(_3).attr("comboName", $(_3).attr("textboxName"));
        _4.combo = $(_3).next();
        _4.combo.addClass("combo");
    };

    function _b(_c) {
        var _d = $.data(_c, "combo");
        var _e = _d.options;
        var p = _d.panel;
        if (p.is(":visible")) {
            p.panel("close");
        }
        if (!_e.cloned) {
            p.panel("destroy");
        }
        $(_c).textbox("destroy");
    };

    function _f(_10) {
        var _11 = $.data(_10, "combo").panel;
        if (_11.is(":visible")) {
            var _12 = _11.combo("combo");
            _13(_12);
            if (_12 != _10) {
                $(_10).combo("showPanel");
            }
        } else {
            var p = $(_10).closest("div.combo-p").children(".combo-panel");
            $("div.combo-panel:visible").not(_11).not(p).panel("close");
            $(_10).combo("showPanel");
        }
        $(_10).combo("textbox").focus();
    };

    function _1(_14) {
        $(_14).find(".combo-f").each(function () {
            var p = $(this).combo("panel");
            if (p.is(":visible")) {
                p.panel("close");
            }
        });
    };

    function _15(e) {
        var _16 = e.data.target;
        var _17 = $.data(_16, "combo");
        var _18 = _17.options;
        if (!_18.editable) {
            _f(_16);
        } else {
            var p = $(_16).closest("div.combo-p").children(".combo-panel");
            $("div.combo-panel:visible").not(p).each(function () {
                var _19 = $(this).combo("combo");
                if (_19 != _16) {
                    _13(_19);
                }
            });
        }
    };

    function _1a(e) {
        var _1b = e.data.target;
        var t = $(_1b);
        var _1c = t.data("combo");
        var _1d = t.combo("options");
        _1c.panel.panel("options").comboTarget = _1b;
        switch (e.keyCode) {
            case 38:
                _1d.keyHandler.up.call(_1b, e);
                break;
            case 40:
                _1d.keyHandler.down.call(_1b, e);
                break;
            case 37:
                _1d.keyHandler.left.call(_1b, e);
                break;
            case 39:
                _1d.keyHandler.right.call(_1b, e);
                break;
            case 13:
                e.preventDefault();
                _1d.keyHandler.enter.call(_1b, e);
                return false;
            case 9:
            case 27:
                _13(_1b);
                break;
            default:
                if (_1d.editable) {
                    if (_1c.timer) {
                        clearTimeout(_1c.timer);
                    }
                    _1c.timer = setTimeout(function () {
                        var q = t.combo("getText");
                        if (_1c.previousText != q) {
                            _1c.previousText = q;
                            t.combo("showPanel");
                            _1d.keyHandler.query.call(_1b, q, e);
                            t.combo("validate");
                        }
                    }, _1d.delay);
                }
        }
    };

    function _1e(_1f) {
        var _20 = $.data(_1f, "combo");
        var _21 = _20.combo;
        var _22 = _20.panel;
        var _23 = $(_1f).combo("options");
        var _24 = _22.panel("options");
        _24.comboTarget = _1f;
        if (_24.closed) {
            _22.panel("panel").show().css({
                zIndex: ($.fn.menu ? $.fn.menu.defaults.zIndex++ : ($.fn.window ? $.fn.window.defaults.zIndex++ : 99)),
                left: -999999
            });
            _22.panel("resize", {
                width: (_23.panelWidth ? _23.panelWidth : _21._outerWidth()),
                height: _23.panelHeight
            });
            _22.panel("panel").hide();
            _22.panel("open");
        }
        (function () {
            if (_24.comboTarget == _1f && _22.is(":visible")) {
                _22.panel("move", {left: _25(), top: _26()});
                setTimeout(arguments.callee, 200);
            }
        })();

        function _25() {
            var _27 = _21.offset().left;
            if (_23.panelAlign == "right") {
                _27 += _21._outerWidth() - _22._outerWidth();
            }
            if (_27 + _22._outerWidth() > $(window)._outerWidth() + $(document).scrollLeft()) {
                _27 = $(window)._outerWidth() + $(document).scrollLeft() - _22._outerWidth();
            }
            if (_27 < 0) {
                _27 = 0;
            }
            return _27;
        };

        function _26() {
            var top = _21.offset().top + _21._outerHeight();
            if (top + _22._outerHeight() > $(window)._outerHeight() + $(document).scrollTop()) {
                top = _21.offset().top - _22._outerHeight();
            }
            if (top < $(document).scrollTop()) {
                top = _21.offset().top + _21._outerHeight();
            }
            return top;
        };
    };

    function _13(_28) {
        var _29 = $.data(_28, "combo").panel;
        _29.panel("close");
    };

    function _2a(_2b, _2c) {
        var _2d = $.data(_2b, "combo");
        var _2e = $(_2b).textbox("getText");
        if (_2e != _2c) {
            $(_2b).textbox("setText", _2c);
        }
        _2d.previousText = _2c;
    };

    function _2f(_30) {
        var _31 = $.data(_30, "combo");
        var _32 = _31.options;
        var _33 = _31.combo;
        var _34 = [];
        _33.find(".textbox-value").each(function () {
            _34.push($(this).val());
        });
        if (_32.multivalue) {
            return _34;
        } else {
            return _34.length ? _34[0].split(_32.separator) : _34;
        }
    };

    function _35(_36, _37) {
        var _38 = $.data(_36, "combo");
        var _39 = _38.options;
        var _3a = _38.combo;
        if (!$.isArray(_37)) {
            _37 = _37.split(_39.separator);
        }
        var _3b = _2f(_36);
        _3a.find(".textbox-value").remove();
        if (_37.length) {
            if (_39.multivalue) {
                for (var i = 0; i < _37.length; i++) {
                    _3c(_37[i]);
                }
            } else {
                _3c(_37.join(_39.separator));
            }
        }

        function _3c(_3d) {
            var _3e = $(_36).attr("textboxName") || "";
            var _3f = $("<input type=\"hidden\" class=\"textbox-value\">").appendTo(_3a);
            _3f.attr("name", _3e);
            if (_39.disabled) {
                _3f.attr("disabled", "disabled");
            }
            _3f.val(_3d);
        };
        var _40 = (function () {
            if (_3b.length != _37.length) {
                return true;
            }
            for (var i = 0; i < _37.length; i++) {
                if (_37[i] != _3b[i]) {
                    return true;
                }
            }
            return false;
        })();
        if (_40) {
            $(_36).val(_37.join(_39.separator));
            if (_39.multiple) {
                _39.onChange.call(_36, _37, _3b);
            } else {
                _39.onChange.call(_36, _37[0], _3b[0]);
            }
            $(_36).closest("form").trigger("_change", [_36]);
        }
    };

    function _41(_42) {
        var _43 = _2f(_42);
        return _43[0];
    };

    function _44(_45, _46) {
        _35(_45, [_46]);
    };

    function _47(_48) {
        var _49 = $.data(_48, "combo").options;
        var _4a = _49.onChange;
        _49.onChange = function () {
        };
        if (_49.multiple) {
            _35(_48, _49.value ? _49.value : []);
        } else {
            _44(_48, _49.value);
        }
        _49.onChange = _4a;
    };
    $.fn.combo = function (_4b, _4c) {
        if (typeof _4b == "string") {
            var _4d = $.fn.combo.methods[_4b];
            if (_4d) {
                return _4d(this, _4c);
            } else {
                return this.textbox(_4b, _4c);
            }
        }
        _4b = _4b || {};
        return this.each(function () {
            var _4e = $.data(this, "combo");
            if (_4e) {
                $.extend(_4e.options, _4b);
                if (_4b.value != undefined) {
                    _4e.options.originalValue = _4b.value;
                }
            } else {
                _4e = $.data(this, "combo", {
                    options: $.extend({}, $.fn.combo.defaults, $.fn.combo.parseOptions(this), _4b),
                    previousText: ""
                });
                _4e.options.originalValue = _4e.options.value;
            }
            _2(this);
            _47(this);
        });
    };
    $.fn.combo.methods = {
        options: function (jq) {
            var _4f = jq.textbox("options");
            return $.extend($.data(jq[0], "combo").options, {
                width: _4f.width,
                height: _4f.height,
                disabled: _4f.disabled,
                readonly: _4f.readonly
            });
        }, cloneFrom: function (jq, _50) {
            return jq.each(function () {
                $(this).textbox("cloneFrom", _50);
                $.data(this, "combo", {
                    options: $.extend(true, {cloned: true}, $(_50).combo("options")),
                    combo: $(this).next(),
                    panel: $(_50).combo("panel")
                });
                $(this).addClass("combo-f").attr("comboName", $(this).attr("textboxName"));
            });
        }, combo: function (jq) {
            return jq.closest(".combo-panel").panel("options").comboTarget;
        }, panel: function (jq) {
            return $.data(jq[0], "combo").panel;
        }, destroy: function (jq) {
            return jq.each(function () {
                _b(this);
            });
        }, showPanel: function (jq) {
            return jq.each(function () {
                _1e(this);
            });
        }, hidePanel: function (jq) {
            return jq.each(function () {
                _13(this);
            });
        }, clear: function (jq) {
            return jq.each(function () {
                $(this).textbox("setText", "");
                var _51 = $.data(this, "combo").options;
                if (_51.multiple) {
                    $(this).combo("setValues", []);
                } else {
                    $(this).combo("setValue", "");
                }
            });
        }, reset: function (jq) {
            return jq.each(function () {
                var _52 = $.data(this, "combo").options;
                if (_52.multiple) {
                    $(this).combo("setValues", _52.originalValue);
                } else {
                    $(this).combo("setValue", _52.originalValue);
                }
            });
        }, setText: function (jq, _53) {
            return jq.each(function () {
                _2a(this, _53);
            });
        }, getValues: function (jq) {
            return _2f(jq[0]);
        }, setValues: function (jq, _54) {
            return jq.each(function () {
                _35(this, _54);
            });
        }, getValue: function (jq) {
            return _41(jq[0]);
        }, setValue: function (jq, _55) {
            return jq.each(function () {
                _44(this, _55);
            });
        }
    };
    $.fn.combo.parseOptions = function (_56) {
        var t = $(_56);
        return $.extend({}, $.fn.textbox.parseOptions(_56), $.parser.parseOptions(_56, ["separator", "panelAlign", {
            panelWidth: "number",
            hasDownArrow: "boolean",
            delay: "number",
            reversed: "boolean",
            multivalue: "boolean",
            selectOnNavigation: "boolean"
        }, {
            panelMinWidth: "number",
            panelMaxWidth: "number",
            panelMinHeight: "number",
            panelMaxHeight: "number"
        }]), {
            panelHeight: (t.attr("panelHeight") == "auto" ? "auto" : parseInt(t.attr("panelHeight")) || undefined),
            multiple: (t.attr("multiple") ? true : undefined)
        });
    };
    $.fn.combo.defaults = $.extend({}, $.fn.textbox.defaults, {
        inputEvents: {click: _15, keydown: _1a, paste: _1a, drop: _1a},
        panelWidth: null,
        panelHeight: 200,
        panelMinWidth: null,
        panelMaxWidth: null,
        panelMinHeight: null,
        panelMaxHeight: null,
        panelAlign: "left",
        reversed: false,
        multiple: false,
        multivalue: true,
        selectOnNavigation: true,
        separator: ",",
        hasDownArrow: true,
        delay: 200,
        keyHandler: {
            up: function (e) {
            }, down: function (e) {
            }, left: function (e) {
            }, right: function (e) {
            }, enter: function (e) {
            }, query: function (q, e) {
            }
        },
        onShowPanel: function () {
        },
        onHidePanel: function () {
        },
        onChange: function (_57, _58) {
        }
    });
})(jQuery);

